package com.xc.hotelmgr.datapusherali.pojo.mybatis;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HtLogicRoom implements Serializable {
	private static final long serialVersionUID = 1L;
	// 主键id
	@TableId
	@JSONField(serialize = false)
	private Long id;

	/** 逻辑房型编码 */
	@JSONField(serialize = false)
	private Long rpCode;

	/** 逻辑房型编码 */
	private String rateplan_code;

	//酒店编码
	@JSONField(name = "out_hid")
	private Long hotelCode;

	/** 物理房型编码 */
	@JSONField(name = "out_rid")
	private Long roomCode;

	//价格计划名称
	@JSONField(name = "name")
	private String rpName;

	/** 是否需要用户真实手机号 */
	@JSONField(serialize = false)
	private Integer isPhone;

	/** 房态 */
	@JSONField(serialize = false)
	private Integer roomStatus;

	/** 产品类型
            rp类型，1为小时房。目前只支持小时房。如果不是小时房rateplan,则不要填写。如果想要清空该字段可以传入none */
	@JSONField(name = "rp_type")
	private String rpType;

	/** 确认类型 */
	@JSONField(serialize = false)
	private String verifyType;

	/** 平均价格 */
	@JSONField(serialize = false)
	private Integer avgPrice;

	/** 市场价格 */
	@JSONField(serialize = false)
	private Integer marketPrice;

	/** 是否第三方产品 */
	@JSONField(serialize = false)
	private Integer isThree;

	/** 早餐个数 */
	@JSONField(name = "breakfast_count")
	private Integer breakfastNum;

	/** 支付类型
            支付类型，只支持：1：预付5：现付6: 信用住7:在线预约8:在线预约信用住。其中5,6,7,8三种类型需要申请权限 */
	@JSONField(name = "payment_type")
	private Integer paymentType;

	/** 最小连住 */
	@JSONField(name = "min_days")
	private Integer minDays;

	/** 最大连住 */
	@JSONField(name = "max_days")
	private Integer maxDays;

	/** 最小提前预定(小时) */
	@JSONField(name = "min_adv_hours")
	private Integer minHours;

	/** 最大提前预定(小时) */
	@JSONField(name = "max_adv_hours")
	private Integer maxHours;

	/** 设施服务 */
	@JSONField(serialize = false)
	private String services;

	/** 有效期开始 */
	@JSONField(name = "effective_time")
	private Date startDate;

	/** 有效期结束 */
	@JSONField(name = "deadline_time")
	private Date endDate;

	/** 每天生效时间 */
	@JSONField(name = "start_time")
	private Date startTime;

	/** 每天失效时间 */
	//2000-01-01 00:00:00
	@JSONField(name = "end_time")
	private Date endTime;

	/** 担保规则 */
	@JSONField(name = "guarantee_cal")
	private String guaranteeRule;

	/** 退订政策 */
	@JSONField(name = "cancel_policy")
	private String cancelPolicy;

	/** 价格政策来源 */
	@JSONField(name = "resource_type")
	private String cancelPolicyFrom;

	/** 状态 */
	//1：开启（默认）2：关闭。如果没传值那么默认默认值为1；（添加RP时为必须）
	@Builder.Default
	@JSONField(name = "status")
	private Integer status = 1;

	/** 类型 */
	//rp类型，1为小时房。目前只支持小时房。如果不是小时房rateplan,则不要填写。如果想要清空该字段可以传入none
	@JSONField(serialize = false)
	private Integer type;

	//首日入住房间数
	@JSONField(serialize = false)
	private Integer minAmount;

	// 英文名称
	@JSONField(name = "english_name")
	private String enName;

	/** 销售渠道。如需开通，需要申请权限。目前支持的渠道有 H:飞猪 O:钉钉商旅 A:集团内部商旅 M:无线专享价。如果只投放飞猪，改字段不用填写或者只填H；如果有多个用","分开。如果需要投放其他渠道，请联系飞猪运营或者技术支持 */
	@JSONField(name = "channel")
	private String channel;

	// 早餐日历
	@JSONField(name = "breakfast_cal")
	private String breakfastCal;

	//在新增rateplan的同时新增取消政策日历。 json格式。 date：日历的某一天，格式为"yyyy-MM-dd" cancel_policy：日历某一天的价格政策。格式和限制同cancel_policy。 如果date为空，那么会读取startDate和endDate（格式都为"yyyy-MM-dd"），即取消政策属于某一个时间段。 注意：支付类型为预付，那么可以使用所有的退订类型，但是必须是非担保；支付类型为面付或者信任住并且是无担保，那么只能使用1类型的退订；支付类型为面付或者信任住并且为担保，那么只能使用2,5类型的退订；支付类型为在线预约，那么只能使用1,2,5类型的退改。如果支付类型是面付或者信任住并且为担保，那么如果传了4或者6的退订，那么会强制转成类型5。请注意，该字段仅能维护从当前时间开始，10年以内的数据，如果超过10年，会报错。
	@JSONField(name = "cancel_policy_cal")
	private String cancelPolicyCal;

	/** 最晚可选离店时间，小时房特有字段。格式为HH:mm */
	// 小时房字段欠缺
	@JSONField(serialize = false)
	private String canCheckoutEnd;

	// 删除接口所需要的酒店 vendor  非数据库字段
	@Builder.Default
	@TableField(exist = false)
	private String vendor;

	// 删除接口所需要的酒店编码 非数据库字段
	@Builder.Default
	@TableField(exist = false)
	private String outer_id;

	/*
	 *数据库不存在字段
	 */
	@TableField(exist = false)
	private String appKey;

	/*
	 *数据库不存在字段
	 */
	@TableField(exist = false)
	private String sessionKey;

	/*
	 * 数据库不存在字段
	 */
	@TableField(exist = false)
	private String secret;

	@TableField(exist = false)
	private List<HtDailyRoom> htDailyRooms;

}